草庐IT

Java String.split 内存泄漏?

全部标签

c# - 如何在不占用大量内存的情况下显示图像

我正在开发一个silverlight项目,用户可以在其中创建自己的拼贴画。问题当使用BitmapImage类加载一堆图像时,Silverlight会占用大量不合理的RAM。150张图片,其中单张图片最多占4.5mb,占用大约1.6GB的RAM——因此最终会抛出内存异常。我通过流加载它们,因为用户选择他们自己的照片。我在找什么一个类、方法或一些过程来消除被吸走的大量RAM。速度是个问题,所以我不想在图像格式或类似格式之间进行转换。快速调整大小的解决方案可能会奏效。我曾尝试使用WriteableBitmap将图像渲染到其中,但我发现这种方法迫使我在拖放和其他我希望用户能够对图像执行的操作时

c# - C#中有没有懒惰的 `String.Split`

全部string.Split方法似乎返回一个字符串数组(string[])。我想知道是否有一个返回IEnumerable的惰性变体这样一个用于大字符串(或无限长度IEnumerable),当只对第一个子序列感兴趣时,可以节省计算量和内存。如果字符串是由设备/程序(网络、终端、管道)构建的,并且整个字符串因此不需要立即完全可用,那么它也可能很有用。这样就可以处理第一次出现的情况。.NETframework中有这样的方法吗? 最佳答案 你可以很容易地写一个:publicstaticclassStringExtensions{public

c# - 内存重新排序会导致 C# 访问未分配的内存吗?

据我了解,C#是一种安全语言,不允许访问未分配的内存,除非通过unsafe关键字。但是,它的内存模型允许在线程之间存在不同步访问时重新排序。这会导致竞争危险,其中对新实例的引用似乎在实例完全初始化之前可用于竞争线程,并且是双重检查锁定的一个众所周知的问题。ChrisBrumme(来自CLR团队)在他们的MemoryModel中解释了这一点文章:Considerthestandarddouble-lockingprotocol:if(a==null){lock(obj){if(a==null)a=newA();}}Thisisacommontechniqueforavoidingaloc

c# - 在哪里放置栅栏/内存屏障以保证新的读取/提交的写入?

像许多其他人一样,我一直对不稳定的读/写和栅栏感到困惑。所以现在我正试图完全理解它们的作用。因此,volatile读取应该(1)表现出获取语义(2)保证读取的值是新鲜的,即它不是缓存值。让我们关注(2)。现在,I'veread也就是说,如果你想执行volatile读取,你应该在读取之后引入一个获取栅栏(或一个完整的栅栏),就像这样:intlocal=shared;Thread.MemoryBarrier();这究竟是如何防止读取操作使用以前缓存的值的?根据栅栏的定义(不允许读取/存储在栅栏上方/下方移动),我会在读取之前插入栅栏,防止读取越过栅栏并被移动及时向后(也就是被缓存)。防止读

C# 内存使用

如何获取C#应用程序中使用的实际内存?TaskManager显示不同的指标。ProcessExplorer显示私有(private)字节的使用增加。性能计数器(perfmon.msc)显示不同的指标当我使用.NET内存分析器时,它显示大部分内存已被垃圾收集,只有很少的事件字节。我不知道该相信哪个。 最佳答案 内存使用比显示一两个数字要复杂一些。我建议你看看MarkRussinovich'sexcellentpost在Windows中的不同种类的计数器上。.NET只会让事情变得更复杂。.NET进程只是另一个Windows进程,因此显然

c# - 如何防止 WCF 客户端应用程序中的 BufferManager/PooledBufferManager 浪费内存?

分析一个WCF客户端应用程序(我没有写,仍然不太了解),它通过SOAP与一堆服务对话,运行几天后会抛出OutOfMemoryException,我发现.net的PooledBufferManager会永远不要释放未使用的缓冲区,即使应用程序内存不足,导致OOME。这当然符合规范:http://msdn.microsoft.com/en-us/library/ms405814.aspxThepoolanditsbuffersare[...]destroyedwhenthebufferpoolisreclaimedbygarbagecollection.请随意回答以下问题中的一个,因为我有

c# - XDocument + IEnumerable 导致 System.Xml.Linq.dll 内存不足异常

基本上我有一个程序,当它开始时加载一个文件列表(如FileInfo),并为列表中的每个文件加载一个XML文档(如XDocument).程序然后从其中读取数据到容器类(存储为IEnumerables),此时XDocument超出范围。程序然后将数据从容器类导出到数据库。然而,在导出容器类超出范围后,垃圾收集器并未清理容器类,因为它存储为IEnumerable,似乎导致了XDocument留在内存中(不确定这是否是原因,但任务管理器显示XDocument中的内存未被释放)。由于程序循环遍历多个文件,最终程序抛出内存不足异常。为了缓解这种情况,我最终使用了System.GC.Collect(

c# - String.Split() - 将连续的定界符视为一个

我正在尝试解析一组“固定宽度”数据文件,我在引号中使用它,因为每个数据文件的宽度不同。但是,这些字段由X个空格分隔,所以我想只读行,然后执行line.Split('')但是,这对连续空格不起作用!! 最佳答案 您有几个选择。第一种是使用接受StringSplitOptions参数并传入StringSplitOptions.RemoveEmptyEntries的string.Split()重载:string[]columns=lineOfText.Split(new[]{''},StringSplitOptions.RemoveEmp

c# - 使用 Entity Framework 和 LINQ 查询大型数据集时如何避免内存溢出

我有一个处理所有数据库方法的类,包括EntityFramework相关的东西。当需要数据时,其他类可能会调用此类中的方法,例如publicListGetData(intstart,intend);数据库正在使用LINQtoEF进行查询,然后调用类可以遍历数据。但由于其他类无法访问EF中的实体,我需要对查询执行“ToList()”操作,并将完整的数据集提取到内存中。如果这个集合非常大(10到100GB)会怎样?是否有一种更有效的迭代方式,同时仍然保持松散耦合? 最佳答案 在Entity框架中处理大型数据集的正确方法是:使用EFv4和P

c# - 在C#中从FTP读取文件到内存

我想从FTP服务器读取文件而不将其下载到本地文件。我写了一个函数,但它不起作用:privatestringGetServerVersion(){WebClientrequest=newWebClient();stringurl=FtpPath+FileName;stringversion="";request.Credentials=newNetworkCredential(ftp_user,ftp_pas);try{byte[]newFileData=request.DownloadData(newUri(FtpPath)+FileName);stringfileString=Sys